package com.crane.oss.school.service;

import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.crane.oss.app.bean.req.AppBindingStudentReq;
import com.crane.oss.app.bean.resp.AppStudentInfo;
import com.crane.oss.school.bean.request.QueryClassesInfoReq;
import com.crane.oss.school.bean.request.QueryClassesReq;
import com.crane.oss.school.bean.request.classesinfo.AddClassesInfoReq;
import com.crane.oss.school.bean.request.classesinfo.BatchDeleteClassesInfoReq;
import com.crane.oss.school.bean.request.classesinfo.BatchImportClassesEntity;
import com.crane.oss.school.bean.request.classesinfo.UpdateClassesInfoReq;
import com.crane.oss.school.bean.resp.ClassTeacherResp;
import com.crane.oss.school.bean.resp.ClassesInfoExportResp;
import com.crane.oss.school.bean.resp.ClassesInfoResp;

/**
 * 班级信息表
 *
 * @author zhenxing.pi
 * @email ccsu123456@qq.com
 * @date 2022年03月26日 14时38分15秒
 */
public interface ClassesInfoService {

    /**
     * 查詢对象<web管理端>
     *
     * @param id
     * @return
     */
    ClassesInfoResp queryClassesInfo(Long id);
    /**
     * 查询班级任课老师信息
     * @param classId
     * @return
     */
    ClassTeacherResp queryClassesTeacher(Long classId);

    /**
     * 查询班级列表<web管理端>
     *
     * @param request
     * @return
     */
    IPage<ClassesInfoResp> queryList(QueryClassesInfoReq request);

    /**
     * 导出班级
     * @param request
     * @return
     */
    List<ClassesInfoExportResp> queryExportList(QueryClassesInfoReq request);

    /**
     * 保持对象
     *
     * @param request
     * @return
     */
    int save(AddClassesInfoReq request);

    /**
     * 修改对象
     *
     * @param request
     * @return
     */
    int update(UpdateClassesInfoReq request);

    /**
     * 删除对象
     *
     * @param id
     * @return
     */
    int delete(Long id);

    /**
     * 批量删除
     *
     * @param request
     * @return
     */
    void batchDelete(BatchDeleteClassesInfoReq request);

    /**
     * 查询某老师还未任教的班级信息<暂时用于下拉框>
     * @param teacherId
     * @param partyId
     * @return
     */
    List<ClassesInfoResp> queryNotExistsClasses(Long teacherId, Long partyId);

    /**
     * 查询所有未删除的班级<仅用于下拉列表>
     * @return
     */
    List<Map<String, Object>> queryClassesForDropDown(QueryClassesReq request);

    /**
     * 查询学生就读分层班信息
     * @param studentId
     * @return
     */
    List<ClassesInfoResp> queryClassesForStudent(Long studentId);

    /**
     * 根据校区id查询
     * @param schoolId
     * @return
     */
    List<ClassesInfoResp> queryClassesForSchoolId(Long schoolId);


    /**
     * APp 根据班级ID和名称查找学生信息
     * @param
     * @return
     */
    List<AppStudentInfo> bindingStudent(AppBindingStudentReq appBindingStudentReq);

    /**
     * 查询某学校的班级名称是否存在
     * @param className
     * @param partyId
     * @return
     */
    boolean queryClassNameExists(String className, Long partyId);

    /**
     * 批量保存班级
     *
     * @param entityList    班级列表信息
     * @param partyId       学校ID
     * @param createUserId  系统用户ID
     * @param schoolId      校区ID
     */
    void batchSave(List<BatchImportClassesEntity> entityList,Long partyId, Long createUserId, Long schoolId);

    /**
     * 班级自动升级
     */
    void updateClassGrade();

    /**
     * 班级毕业
     */
    void updateClassOver();
}
